package cn.java8practise.lambda;

import lombok.extern.slf4j.Slf4j;

import java.util.*;
import java.util.function.Function;

/**
 * Function的用例
 * --Function<T,R>方法中，T表示入参，R（）表示出参
 *
 * Created by fayangsh on 17-4-19.
 */
@Slf4j
public class FunctionTest {
    public static void main(String[] args) {
        //传递apply执行的方法
        Set<Integer> integers=test(Arrays.asList("12","34","123"),(String str) -> {
            if (str.length() > 2){
                return str.length();
            }
            return null;
        });
        log.info(integers.toString());
    }

    /**
     * 如果为空，就不会存入
     *
     * @param strs
     * @param f
     * @param <T>
     * @param <R>
     * @return
     */
    private static <T,R> Set<R> test(List<T> strs, Function<T,R> f) {
        Set<R> integers = new TreeSet<>();
        for (T t:strs){
            if (null==f.apply(t))
                continue;
            integers.add(f.apply(t));
        }
        return integers;
    }
}
